#include <stdint.h>

#ifdef CONFIG_GFX_CONSOLE
#include "gfx_console.h"

const uint8_t font8x16[] =
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 00
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 01
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 02
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 03
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 04
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 05
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 06
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 07
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 08
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 09
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0A
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0B
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0C
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0D
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0E
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0F
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 10
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 11
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 12
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 13
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 14
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 15
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 16
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 17
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 18
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 19
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1A
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1B
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1C
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1D
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1E
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1F
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 20
    0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, // 21
    0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 22
    0x00, 0x00, 0x28, 0x28, 0x28, 0xFE, 0x28, 0x28, 0x28, 0xFE, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, // 23
    0x08, 0x08, 0x3C, 0x4A, 0x88, 0x90, 0x50, 0x38, 0x14, 0x12, 0x22, 0xA4, 0x78, 0x20, 0x20, 0x00, // 24
    0x00, 0x00, 0x42, 0xA4, 0xA4, 0xA8, 0x48, 0x10, 0x24, 0x2A, 0x4A, 0x4A, 0x84, 0x00, 0x00, 0x00, // 25
    0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x20, 0x50, 0x8A, 0x84, 0x8C, 0x72, 0x00, 0x00, 0x00, // 26
    0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 27
    0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, // 28
    0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, // 29
    0x00, 0x00, 0x00, 0x10, 0x10, 0xD6, 0x38, 0xFE, 0x38, 0xD6, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, // 2A
    0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // 2B
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, // 2C
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2D
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, // 2E
    0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, // 2F
    0x00, 0x00, 0x38, 0x44, 0x44, 0x86, 0x8A, 0x92, 0xA2, 0xC2, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, // 30
    0x00, 0x00, 0x10, 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x00, 0x00, // 31
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFE, 0x00, 0x00, 0x00, // 32
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x04, 0x18, 0x04, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 33
    0x00, 0x00, 0x0C, 0x14, 0x14, 0x24, 0x24, 0x44, 0x44, 0x84, 0xFE, 0x04, 0x04, 0x00, 0x00, 0x00, // 34
    0x00, 0x00, 0xFE, 0x80, 0x80, 0x80, 0xF8, 0x04, 0x02, 0x02, 0x02, 0x04, 0xF8, 0x00, 0x00, 0x00, // 35
    0x00, 0x00, 0x3C, 0x40, 0x80, 0x80, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 36
    0x00, 0x00, 0xFE, 0x02, 0x04, 0x04, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, // 37
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x44, 0x38, 0x44, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 38
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x46, 0x3A, 0x02, 0x02, 0x04, 0x78, 0x00, 0x00, 0x00, // 39
    0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, // 3A
    0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, // 3B
    0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, // 3C
    0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3D
    0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, // 3E
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x02, 0x04, 0x08, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, // 3F
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x9A, 0xA6, 0xA2, 0xA2, 0x9C, 0x40, 0x3C, 0x00, 0x00, 0x00, // 40
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0xFE, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 41
    0x00, 0x00, 0xF8, 0x84, 0x82, 0x82, 0x84, 0xF8, 0x84, 0x82, 0x82, 0x84, 0xF8, 0x00, 0x00, 0x00, // 42
    0x00, 0x00, 0x3C, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x42, 0x3C, 0x00, 0x00, 0x00, // 43
    0x00, 0x00, 0xF8, 0x84, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x84, 0xF8, 0x00, 0x00, 0x00, // 44
    0x00, 0x00, 0xFE, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x80, 0x80, 0x80, 0x80, 0xFE, 0x00, 0x00, 0x00, // 45
    0x00, 0x00, 0xFE, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, // 46
    0x00, 0x00, 0x3C, 0x42, 0x80, 0x80, 0x80, 0x8E, 0x82, 0x82, 0x82, 0x42, 0x3E, 0x00, 0x00, 0x00, // 47
    0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0xFE, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 48
    0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x00, 0x00, // 49
    0x00, 0x00, 0xFE, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x84, 0x48, 0x30, 0x00, 0x00, 0x00, // 4A
    0x00, 0x00, 0x82, 0x84, 0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x84, 0x82, 0x00, 0x00, 0x00, // 4B
    0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0x00, 0x00, 0x00, // 4C
    0x00, 0x00, 0x82, 0xC6, 0xAA, 0xAA, 0x92, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 4D
    0x00, 0x00, 0x82, 0xC2, 0xC2, 0xA2, 0xA2, 0x92, 0x8A, 0x8A, 0x86, 0x86, 0x82, 0x00, 0x00, 0x00, // 4E
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 4F
    0x00, 0x00, 0xF8, 0x84, 0x82, 0x82, 0x84, 0xF8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, // 50
    0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x54, 0x38, 0x12, 0x0C, 0x00, // 51
    0x00, 0x00, 0xF8, 0x84, 0x82, 0x82, 0x84, 0xF8, 0x90, 0x88, 0x84, 0x82, 0x82, 0x00, 0x00, 0x00, // 52
    0x00, 0x00, 0x38, 0x44, 0x82, 0x80, 0x40, 0x38, 0x04, 0x02, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 53
    0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 54
    0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 55
    0x00, 0x00, 0x82, 0x82, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00, // 56
    0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x54, 0x54, 0x6C, 0x44, 0x00, 0x00, 0x00, // 57
    0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x82, 0x82, 0x00, 0x00, 0x00, // 58
    0x00, 0x00, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 59
    0x00, 0x00, 0xFE, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0xFE, 0x00, 0x00, 0x00, // 5A
    0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00, // 5B
    0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, // 5C
    0x00, 0x00, 0x7C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7C, 0x00, 0x00, 0x00, // 5D
    0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5E
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, // 5F
    0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 60
    0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x04, 0x02, 0x7E, 0x82, 0x82, 0x86, 0x7A, 0x00, 0x00, 0x00, // 61
    0x00, 0x00, 0x80, 0x80, 0x80, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0xC4, 0xB8, 0x00, 0x00, 0x00, // 62
    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x80, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 63
    0x00, 0x00, 0x02, 0x02, 0x02, 0x3A, 0x46, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3A, 0x00, 0x00, 0x00, // 64
    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0xFE, 0x80, 0x80, 0x40, 0x3C, 0x00, 0x00, 0x00, // 65
    0x00, 0x00, 0x0E, 0x10, 0x20, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, // 66
    0x00, 0x00, 0x00, 0x00, 0x3A, 0x44, 0x44, 0x44, 0x38, 0x40, 0x80, 0x7C, 0x02, 0x82, 0x7C, 0x00, // 67
    0x00, 0x00, 0x80, 0x80, 0x80, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 68
    0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x00, 0x00, // 69
    0x00, 0x00, 0x00, 0x04, 0x00, 0x3C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x84, 0x78, 0x00, // 6A
    0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x86, 0x98, 0xA0, 0xC0, 0xA0, 0x98, 0x86, 0x00, 0x00, 0x00, // 6B
    0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x00, 0x00, // 6C
    0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xD2, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, // 6D
    0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 6E
    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 6F
    0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0xC4, 0xB8, 0x80, 0x80, 0x80, // 70
    0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x46, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3A, 0x02, 0x02, 0x02, // 71
    0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xC2, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, // 72
    0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x82, 0x80, 0x78, 0x04, 0x02, 0x84, 0x78, 0x00, 0x00, 0x00, // 73
    0x00, 0x00, 0x20, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x0E, 0x00, 0x00, 0x00, // 74
    0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3A, 0x00, 0x00, 0x00, // 75
    0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, // 76
    0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0x44, 0x54, 0x54, 0x28, 0x28, 0x00, 0x00, 0x00, // 77
    0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, // 78
    0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x42, 0x44, 0x24, 0x24, 0x18, 0x08, 0x10, 0x60, 0x00, // 79
    0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x04, 0x18, 0x20, 0x40, 0x80, 0xFE, 0x00, 0x00, 0x00, // 7A
    0x00, 0x00, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x00, // 7B
    0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 7C
    0x00, 0x00, 0x60, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00, // 7D
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x92, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7E
    0x00, 0x00, 0xFE, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00  // 7F
};

//-----------------------------------------------------------------
// Defines
//-----------------------------------------------------------------
#define OFFSET_X     10
#define OFFSET_Y     0
#define FONT_WIDTH   8
#define FONT_HEIGHT  16
#define MAX_LINE_LEN 240

// 24 bit RGB to 16 bit RGB565
#define RGB565(r,g,b) (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3))

//-----------------------------------------------------------------
// Locals
//-----------------------------------------------------------------
static int       m_curr_x;
static int       m_curr_y;
static int       m_max_x;
static int       m_max_y;
static int       m_width;
static int       m_height;
static int       m_enabled;
static uint16_t *m_frame_buf;
static uint16_t  m_foreground;
static uint16_t  m_background;
static char      m_line_buf[MAX_LINE_LEN+1];

//-----------------------------------------------------------------
// gfx_draw_pixel: Draw a single pixel to the frame buffer
//-----------------------------------------------------------------
static void gfx_draw_pixel(uint16_t *frame, int x, int y, uint16_t colour)
{
    int offset = x + (y * m_width);
    frame[offset] = colour;
}
//-----------------------------------------------------------------
// gfx_draw_bitmap: Draw a bitmap image
//-----------------------------------------------------------------
static void gfx_draw_bitmap(uint16_t *frame, uint8_t* bitmap, int x, int y, int width, int height, uint16_t colour)
{
    int widthBytes = width / 8;
    for(int v=0; v<height; v++)
    {
        for (int u=0; u<width; u++)
        {
            int b = u >> 3;     // the byte to select
            int bit = ~u & 7;   // the bit to read
            if (bitmap[widthBytes * v + b] & (1 <<bit))
                gfx_draw_pixel(frame, x + u, y + v, colour);
            else
                gfx_draw_pixel(frame, x + u, y + v, m_background);
        }
    }
}
//-----------------------------------------------------------------
// gfx_draw_character: Print a single character to the frame buffer
//-----------------------------------------------------------------
static void gfx_draw_character(uint16_t *frame, uint8_t* font, char ch, int x, int y, uint16_t colour)
{
     gfx_draw_bitmap(frame, &font[FONT_HEIGHT * ch], x, y, FONT_WIDTH, FONT_HEIGHT, colour);
}
//-----------------------------------------------------------------
// gfx_draw_string: Print a string to the frame buffer
//-----------------------------------------------------------------
static void gfx_draw_string(uint16_t *frame, uint8_t* font, char *str, int x, int y, uint16_t colour)
{
    while (*str)
    {
        gfx_draw_bitmap(frame, &font[FONT_HEIGHT * (*str)], x, y, FONT_WIDTH, FONT_HEIGHT, colour);
        str++;
        x+=FONT_WIDTH;
    }
}
//-----------------------------------------------------------------
// gfx_console_init: Framebuffer console init
//-----------------------------------------------------------------
void gfx_console_init(uint16_t *fb, int width, int height, int en)
{
    m_curr_x  = m_curr_y = 0;
    m_enabled = en;
    for (int i=0;i<MAX_LINE_LEN;i++)
        m_line_buf[i] = ' ';

    m_width     = width;
    m_height    = height;
    m_max_x     = (m_width - OFFSET_X) / FONT_WIDTH;
    m_max_y     = (m_height - OFFSET_Y) / FONT_HEIGHT;
    m_frame_buf = fb;
    m_foreground  = RGB565(255, 255, 255);
    m_background  = RGB565(0,   0,   0);
}
//-----------------------------------------------------------------
// gfx_console_enable: Enable / disable
//-----------------------------------------------------------------
void gfx_console_enable(int en)
{
    m_enabled = en;
}
//-----------------------------------------------------------------
// gfx_console_set_colour: Set font colour
//-----------------------------------------------------------------
void gfx_console_set_colour(int r, int g, int b)
{
    m_foreground  = RGB565(r, g, b);
}
//-----------------------------------------------------------------
// gfx_console_set_background: Set background colour
//-----------------------------------------------------------------
void gfx_console_set_background(int r, int g, int b)
{
    m_background  = RGB565(r, g, b);
}
//-----------------------------------------------------------------
// gfx_console_clear: Reset framebuffer to background colour
//-----------------------------------------------------------------
void gfx_console_clear(void)
{
    for (int y=0;y<m_height;y++)
        for (int x=0;x<m_width;x++)
            m_frame_buf[x + (y * m_width)] = m_background;

    m_curr_x  = m_curr_y = 0;

    for (int i=0;i<MAX_LINE_LEN;i++)
        m_line_buf[i] = ' ';
}
//-----------------------------------------------------------------
// gfx_console_putc: Framebuffer putchar
//-----------------------------------------------------------------
int gfx_console_putc(char ch)
{
    if (!m_enabled)
        return 1;

    if (m_curr_x < MAX_LINE_LEN)
        m_line_buf[m_curr_x++] = (ch < 128) ? ch : ' ';

    if (ch == '\n' || m_curr_x == m_max_x)
    {
        m_line_buf[m_curr_x] = '\0';
        gfx_draw_string(m_frame_buf, (uint8_t*)font8x16, m_line_buf, OFFSET_X, m_curr_y * FONT_HEIGHT, m_foreground);
        if (++m_curr_y >= m_max_y)
            m_curr_y = 0;
        m_curr_x = 0;
    }

    return 1;
}
#endif